package com.liuqing.www.多线程技术;

import java.util.ArrayList;
import java.util.List;
/**
 *       yield()应该做的是让当前运行线程回到可运行状态，
 *       以允许具有相同优先级的其他线程获得运行机会。
 *       因此，使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。
 *       但是，实际中无法保证yield()达到让步目的，
 *       因为让步的线程还有可能被线程调度程序再次选中。
结论：yield()从未导致线程转到等待/睡眠/阻塞状态。
在大多数情况下，yield()将导致线程从运行状态转到可运行状态，但有可能没有效果。  
join()让一个线程B“加入”到另外一个线程A的尾部。在A执行完毕之前，B不能工作                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
 * @author 韩世超
 *
 */
public class YieldORJoin {
	public static List<String> li=new ArrayList<String>();
	static{
		li.add("lili1");
		li.add("lili2");
		li.add("lili3");
	}
	public static void main(String[] args) {
//		new Thread11().start();
		Thread t2=	new Thread12();
		t2.start();
		try {
			t2.join();//此处阻塞，等t2执行完才继续往下执行，与想象中不一样
			System.out.println("看机执行没？");
			System.out.println("就是不让你执行");
			Thread.sleep(10000);
			System.out.println("睡够了，你去执行吧");
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}
class Thread11  extends Thread{
	public void run(){
			while(true){
			try {
				synchronized (YieldORJoin.li) {
					System.out.println("Thread1开始检测.....");
					this.yield();
	//				WaitOrNotify.li.notify();
					for(String str:YieldORJoin.li){
						System.out.println("Thread1"+str);
					}
//					WaitOrNotify.li.notify();//notify、wait、notifyall必须在同步块中
				}
				Thread.sleep(1000);	
				} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}
class Thread12  extends Thread{
	public void run(){
//		while(true){
			try {
				synchronized (YieldORJoin.li) {
					System.out.println("Thread2开始检测.....");
//					WaitOrNotify.li.wait();//放弃当前线程对li的锁，使自己处于等待态，不往下执行
					for(String str:YieldORJoin.li){
						System.out.println("Thread2"+str);
					}
//					YieldORJoin.li.notify();//notifyAll激活等候集所有，notify激活等候集一个
				}
			
				Thread.sleep(1000);	
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
//		}
	}
}
